﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace iNet.Media
{
	/// <summary>
	/// 媒體格式介面。
	/// </summary>
	public interface IMediaFormat
	{
		/// <summary>
		/// 取得格式描述。
		/// </summary>
		string Description { get; }
		/// <summary>
		/// 取得適用於儲存此格式的檔案副檔名。
		/// </summary>
		string[] FileNameExtensions { get; }
		/// <summary>
		/// 取得表示此格式的 MIME (Multipurpose Internet Mail Extensions) 格式字串。
		/// </summary>
		string[] MimeTypes { get; }
	}

	#region MediaFormat
	/// <summary>
	/// 實作 IMediaFormat 介面的類別。
	/// </summary>
	public class MediaFormat : IMediaFormat
	{
		#region 欄位
		readonly string _Description;
		readonly string[] _FileNameExtensions;
		readonly string[] _MimeType;
		#endregion
		#region 建構子
		/// <summary>
		/// 初始化新的 MediaFormat 執行個體。
		/// </summary>
		/// <param name="description">格式描述。</param>
		/// <param name="mimeType">MIME (Multipurpose Internet Mail Extensions) 格式字串。</param>
		/// <param name="extension">儲存此格式的檔案副檔名。</param>
		public MediaFormat(string description, string mimeType, string extension)
			: this(description, mimeType, new string[] { extension })
		{ }
		/// <summary>
		/// 初始化新的 MediaFormat 執行個體。
		/// </summary>
		/// <param name="description">格式描述。</param>
		/// <param name="mimeType">MIME (Multipurpose Internet Mail Extensions) 格式字串。</param>
		/// <param name="extensions">儲存此格式的檔案副檔名。</param>
		public MediaFormat(string description, string mimeType, string[] extensions)
			: this(description, new string[] { mimeType }, extensions)
		{ }
		/// <summary>
		/// 初始化新的 MediaFormat 執行個體。
		/// </summary>
		/// <param name="description">格式描述。</param>
		/// <param name="mimeTypes">MIME (Multipurpose Internet Mail Extensions) 格式字串。</param>
		/// <param name="extensions">儲存此格式的檔案副檔名。</param>
		public MediaFormat(string description, string[] mimeTypes, string[] extensions)
		{
			_Description = description;
			_MimeType = (mimeTypes != null ? mimeTypes : new string[0]);
			_FileNameExtensions = (extensions != null ? extensions : new string[0]);
		}
		#endregion
		#region Description
		/// <summary>
		/// 取得格式描述。
		/// </summary>
		public string Description
		{
			get
			{
				return _Description;
			}
		}
		#endregion
		#region FileNameExtensions
		/// <summary>
		/// 取得適用於儲存此格式的檔案副檔名。
		/// </summary>
		public string[] FileNameExtensions
		{
			get
			{
				return _FileNameExtensions.Clone() as string[];
			}
		}
		#endregion
		#region MimeType
		/// <summary>
		/// 取得表示此格式的 MIME (Multipurpose Internet Mail Extensions) 格式字串。
		/// </summary>
		public string[] MimeTypes
		{
			get
			{
				return (_MimeType.Clone() as string[]);
			}
		}
		#endregion
	}
	#endregion
}
